package org.graylog2.logging; import org.hamcrest.CoreMatchers; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; import java.util.regex.Pattern; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.*; /** * @author lkmikkel */ public class GelfHandlerTest { private MockGelfHandlerSender gelfSender; @Before public void setUp() throws IOException { gelfSender = new MockGelfHandlerSender(); InputStream is = GelfHandlerTest.class.getResourceAsStream("logging-test.properties"); LogManager.getLogManager().readConfiguration(is); } @Test public void handleNullMessage() { Logger myLogger = Logger.getLogger("testNullMessage"); myLogger.log(Level.FINE, (String) null); assertThat( "Message short message", gelfSender.getLastMessage().getShortMessage(), notNullValue() ); assertThat( "Message full message", gelfSender.getLastMessage().getFullMessage(), notNullValue() ); } @Test public void handleAdditionalField() { Logger myLogger = Logger.getLogger("testAdditionalField"); myLogger.log( Level.FINE, "test additional field" ); assertEquals("bar", gelfSender.getLastMessage().getAdditonalFields().get("foo")); assertNull(gelfSender.getLastMessage().getAdditonalFields().get("non-existent")); } @Test public void handleStackTraces() { Logger myLogger = Logger.getLogger("testStackTraces"); myLogger.log( Level.FINE, "test stacktrace:", new RuntimeException("test") ); Pattern regex = Pattern.compile("^.*java\\.lang\\.RuntimeException: test.*at org\\.graylog2\\.logging\\.GelfHandlerTest\\.handleStackTraces.*$", Pattern.MULTILINE | Pattern.DOTALL); assertTrue(regex.matcher(gelfSender.getLastMessage().getFullMessage()).matches()); } @Test public void testLogFormattingWithParameter() { Logger myLogger = Logger.getLogger("testLogFormattingWithParameter"); myLogger.log( Level.FINE, "logging param: {0}", "param1"); assertEquals( gelfSender.getLastMessage().getFullMessage(), "logging param: param1" ); } @Test public void testLogFormattingWithParameters() { Logger myLogger = Logger.getLogger("testLogFormattingWithParameters"); myLogger.log( Level.FINE, "logging params: {0} {1}", new Object[] {new Integer(1), "param2"}); assertEquals( gelfSender.getLastMessage().getFullMessage(), "logging params: 1 param2" ); } @Test public void testLogFormattingWithPercentParameters() { Logger myLogger = Logger.getLogger("testLogFormattingWithPercentParameters"); myLogger.log( Level.FINE, "logging percent params: %d %s", new Object[] {1, "param2"}); assertEquals( gelfSender.getLastMessage().getFullMessage(), "logging percent params: 1 param2" ); } @Test public void testLogFormattingWithPercentParameters_InvalidParameters() { Logger myLogger = Logger.getLogger("testLogFormattingWithPercentParameters_InvalidParameters"); myLogger.log( Level.FINE, "logging percent params: %d %d", new Object[] {1, "param2"}); assertEquals( gelfSender.getLastMessage().getFullMessage(), "logging percent params: %d %d" ); } @Test public void testNullLogWithParameters() { Logger myLogger = Logger.getLogger("testNullLogWithParameters"); myLogger.log( Level.FINE, null, new Object[] {1, "param2"}); assertEquals( gelfSender.getLastMessage().getFullMessage(), "" ); } @Test public void testSetAdditionalField() { GelfHandler gelfHandler = new GelfHandler(); gelfHandler.setAdditionalField(null); gelfHandler.setAdditionalField("="); gelfHandler.setAdditionalField("=="); Map<String, String> fields = gelfHandler.getFields(); assertThat("No empty key exists", fields.get(""), CoreMatchers.nullValue()); } }